📜 [專欄新文章] Gas Efficient Card Drawing in Solidity
✍️ Ping Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Assign random numbers as the index of newly minted NFTs
Scenario
The fun of generative art NFT projects depends on randomness. The industry standard is “blind box”, where both the images’ serial number and the NFTs’ index are predetermined but will be shifted randomly when the selling period ends. (They call it “reveal”) This approach effectively solves the randomness issue. However, it also requires buyers to wait until the campaign terminates. What if buyers want to know the exact card right away? We’ll need a reliable onchain card drawing solution.
The creator of Astrogator🐊 isn’t a fan of blind boxes; instead, it thinks unpacking cards right after purchase is more interesting.
Spec
When initializing this NFT contract, the creator will determine the total supply of it. And there will be an iterable function that is randomly picking a number from the remaining pool. The number must be in range and must not collide with any existing ones.
Our top priority is accessibility/gas efficiency. Given that gas cost on Ethereum is damn high nowadays, we need an elegant algorithm to control gas expanse at an acceptable range.
Achieving robust randomness isn’t the primary goal here. We assume there’s no strong financial incentive to cheat, so the RNG isn’t specified. Implementers can bring their own source of randomness that they think is good enough.
Implementation
Overview
The implementation is pretty short and straightforward. Imagine there’s an array that contains all remaining(unsold) cards. When drawIndex() is called, it generates a (uniform) random seed to draw a card from the array, shortens the array, and returns the selected card.
Algorithm
Drawing X cards from a deck with the same X amount of cards is equal to shuffling the deck and dealing them sequentially. It’s not a surprise that our algorithm is similar to random shuffling, and the only difference is turning that classic algo into an interactive version.
A typical random shuffle looks like this: for an array with N elements, you randomly pick a number i in (0,N), swap array[0] and array[i], then choose another number i in (1,N), swap array[1] and array[i], and so on. Eventually, you’ll get a mathematically random array in O(N) time.
So, the concept of our random card dealing is the same. When a user mints a new card, the smart contract picks a number in the array as NFT index, then grabs a number from the tail to fill the vacancy, in order to keep the array continuous.
Tweak
Furthermore, as long as the space of the NFT index is known, we don’t need to declare/initialize an array(which is super gas-intensive). Instead, assume there’s such an array that the n-th element is n, we don’t actually initialize it (so it is an array only contains “0”) until the rule is broken.
For the convenience of explanation, let’s call that mapping cache. If cache[i] is empty, it should be interpreted as i instead of 0. On the other hand, when a number is chosen and used, we’ll need to fill it up with another unused number. An intuitive method is to pick a number from the end of the array, since the length of the array is going to decrease by 1.
By doing so, the gas cost in the worst-case scenario is bound to be constant.
Performance and limitation
Comparing with the normal ascending index NFT minting, our random NFT implementation requires two extra SSTORE and one extra SLOAD, which cost 12600 ~ 27600 (5000+20000+2600) excess gas per token minted.
Theoretically, any instantly generated onchain random number is vulnerable. We can restrict contract interaction to mitigate risk. The mitigation is far from perfect, but it is the tradeoff that we have to accept.
ping.eth
Gas Efficient Card Drawing in Solidity was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「hand images drawing」的推薦目錄:
- 關於hand images drawing 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於hand images drawing 在 Chanawan จัยมันรัก Facebook 的最讚貼文
- 關於hand images drawing 在 Pin2D 電繪狂 Facebook 的最佳貼文
- 關於hand images drawing 在 コバにゃんチャンネル Youtube 的最佳貼文
- 關於hand images drawing 在 大象中醫 Youtube 的最佳貼文
- 關於hand images drawing 在 大象中醫 Youtube 的最佳解答
- 關於hand images drawing 在 52 Pictures of hands ideas | how to draw hands, drawings, art ... 的評價
- 關於hand images drawing 在 How to Draw HANDS and HAND POSES! - YouTube 的評價
hand images drawing 在 Chanawan จัยมันรัก Facebook 的最讚貼文
✨ จับจริง แจกจริง ขอแสดงความยินดีกับผู้โชคดีที่ได้รับสร้อยคอทองคำ 1 บาท จากการจับรางวัลแคมเปญ “ขุดแหลก แจกโชค” ครั้งที่ 1 ทั้งหมด 10 ท่าน
✨ สำหรับการจับรางวัลครั้งที่ 2 จะจับในวันที่ 30 พ.ย. 2563 ของรางวัล ได้แก่ สร้อยคอทองคำหนัก 5 บาท จำนวน 2 รางวัล และ รถขุดคูโบต้า KX91-3SX CE ช้างศึกอิดิชั่น จำนวน 1 รางวัล มูลค่ารวมกว่า 1,400,000 บาท
💥 ใครที่อยากลุ้นรางวัล รีบซื้อรถขุดคูโบต้า ภายในวันที่ 31 ต.ค. 2563 นี้เท่านั้น
หมายเหตุ :
เงื่อนไข (1.) ผู้มีสิทธิ์ลุ้นรับรางวัลคือ ลูกค้าผู้ซื้อรถขุดคูโบต้ามือหนึ่งทุกรุ่น ตั้งแต่ 1 มิถุนายน 2563 - 31 ตุลาคม 2563 จากตัวแทนจำหน่ายของบริษัทสยามคูโบต้าคอร์ปอเรชั่น จำกัด ทั่วราชอาณาจักรไทย และทำสัญญาเช่าซื้อให้แล้วเสร็จ ภายใน15 พฤศจิกายน 2563 จะมีสิทธิ์ลุ้นรับของรางวัล โดยการซื้อรถขุดคูโบต้า 1 คัน จะมีสิทธิ์ลุ้นรับรางวัล 1 สิทธิ์
(2.) กำหนดจับรางวัล ทั้งสิ้น 2 ครั้ง โดยมีรายละเอียด ดังนี้
ครั้งที่ 1 วันที่ 31 ส.ค. 63 เวลา 10.00 น. ของรางวัล สร้อยคอทองคำหนัก 1 บาท จำนวน 10 รางวัล มูลค่ารวม 250,000 บาท (ผู้มีสิทธิ์จับรางวัล คือ ลูกค้าที่ซื้อรถขุดคูโบต้าระหว่างวันที่ 1 มิ.ย. 2563 -31 ก.ค. 2563และ ทำสัญญาเช่าซื้อให้แล้วเสร็จ ภายใน 15 ส.ค. 2563)
ครั้งที่ 2 วันที่ 30 พ.ย. 63 เวลา 10.00 น. ของรางวัล รถขุดคูโบต้า ขนาด 3.2 ตัน รุ่น KX91-3SX (KIS) (CE) ช้างศึกอิดิชั่น จำนวน 1 คัน มูลค่า 1,150,000 บาท และ สร้อยคอทองคำหนัก 5 บาท จำนวน 2 รางวัล มูลค่า 250,000 บาท (ผู้มีสิทธิ์จับรางวัล คือ ลูกค้าที่ซื้อรถขุดคูโบต้าระหว่างวันที่ 1 มิ.ย.2563 – 31 ต.ค. 2563 และ ทำสัญญาเช่าซื้อให้แล้วเสร็จ ภายใน 15 พ.ย. 2563)
(3.) สถานที่จับรางวัล : บริษัทสยามคูโบต้าคอร์ปอเรชั่น จำกัด (สำนักงานใหญ่) เลขที่ 101/19-24 หมู่ที่ 20 นิคมอุตสาหกรรมนวนคร ตำบลคลองหนึ่ง อำเภอคลองหลวง จังหวัดปทุมธานี 12120
(4.) วิธีการจับรางวัล : ผู้แทนจำหน่ายคีย์ข้อมูลลูกค้าที่ซื้อรถขุดคูโบต้าในระบบ KADs (KUBOTA AUTHORIZED DEALER SYSTEM) ของบริษัทฯ ซึ่งข้อมูลลูกค้าประกอบด้วย
- ข้อมูลเบื้องต้นของลูกค้า ได้แก่ ชื่อ-นามสกุล ,ที่อยู่ ,เบอร์โทรศัพท์
- ข้อมูลการซื้อสินค้า ได้แก่ รุ่นรถ หมายเลขรถ หมายเลขเครื่อง วันที่ซื้อ ผู้แทนจำหน่ายที่ซื้อสินค้า
(5.) บริษัทฯจะประกาศรายชื่อผู้โชคดีทาง Facebook รถขุดคูโบต้า-Kubota Excavator (www.facebook.com/KubotaExcavator
) โดยมีรายละเอียด ดังนี้ ครั้งที่ 1 : วันที่ 31 สิงหาคม 2563 / ครั้งที่ 2 : วันที่ 30 พฤศจิกายน 2563
(6.) ผู้โชคดีที่ได้รับรางวัลจะต้องส่งเอกสารฉบับจริงในการรับรางวัลที่ธุรกิจเครื่องจักรกลก่อสร้าง บริษัท สยามคูโบต้าคอร์ปอเรชั่น จำกัด (สำนักงานใหญ่) เลขที่ 101/19-24 อาคาร 2 ชั้น 4 หมู่ที่ 20 นิคมอุตสาหกรรมนวนคร ตำบลคลองนึ่ง อำเภอคลองหลวง จังหวัดปทุมธานี 12120 โทร.02-9090300 ต่อ 449 (ภายในเวลาทำการ จันทร์-ศุกร์ เวลา 08.00 - 17.00 น.) ด้วยตนเองหรือทางไปรษณีย์ เพื่อตรวจสอบหลักฐาน และยืนยันการรับสิทธิ์ภายใน 15 วันหลังประกาศรางวัล มิฉะนั้นจะถือว่าสละสิทธิ์
(7.) ผู้โชคดีที่ได้รับรางวัลจะต้องรับรางวัลตามที่กำหนดไว้ รางวัลที่ได้ไม่สามารถแลกเปลี่ยนเป็นเงินสด หรือของรางวัลอื่นได้และไม่มีการจ่ายเงินเป็นส่วนประกอบ
(8.) ในกรณีที่ผู้โชคดีลำดับที่ 1 สละสิทธิ์ บริษัทฯจะมอบรางวัลให้กับผู้โชคดีสำรองตามลำดับ
(9.) คำตัดสินของคณะกรรมการถือเป็นเด็ดขาดและที่สุด
(10.) พนักงานของบริษัทสยามคูโบต้าคอร์ปอเรชั่น จำกัด และ บริษัท สยามคูโบต้า ลีสซิ่ง จำกัด รวมถึงพนักงานของผู้แทนจำหน่ายฯบริษัทตัวแทนโฆษณา และคณะกรรมการดำเนินงานพร้อมครอบครัวไม่มีสิทธิ์เข้าร่วมรายการ
(11.) ผู้ได้รับรางวัลยินยอมให้ บริษัทสยามคูโบต้าคอร์ปอเรชั่น จำกัด นำภาพข้อมูล หรือรายละเอียดต่างๆ ของผู้ได้รับรางวัลไปใช้ในการโฆษณาประชาสัมพันธ์ของบริษัทฯ ผ่านสื่อต่างๆ ประกอบการโฆษณาประกอบด้วย โทรทัศน์ วิทยุ หนังสือพิมพ์ โปสเตอร์ Facebook, Line, Website และสื่อสิ่งพิมพ์ทุกชนิด
(12.) รางวัลตั้งแต่มูลค่า 1,000 บาทขึ้นไป จะต้องชำระภาษีหัก ณ ที่จ่าย 5% ของมูลค่าของรางวัล
(13.) ผู้โชคดีมีสิทธิ์ได้รับรางวัลสูงสุดเพียงรางวัลเดียวเท่านั้น หากมีการจับรางวัลผู้โชคดีรายชื่อซ้ำกัน บริษัทฯจะจับรางวัลใหม่เพื่อให้ผู้โชคดีรายใหม่แทน
(14.) ผู้โชคดีที่เช่าซื้อผ่านสยามคูโบต้าลีสซิ่ง จะต้องมีสถานะการผ่อนชำระรถขุดคูโบต้าตามปกติเท่านั้น
(15.) ใบอนุญาตจัดมีการให้เล่นเกมพกหรือรางวัลใน การเสี่ยงโชคฯ โดยศูนย์บริการประชาชน กรมการปกครอง ใบอนุญาตเลขที่ 29/2563-30/2563
สอบถามข้อมูลสินค้าและบริการเพิ่มเติม ได้ที่
Inbox https://m.me/KubotaExcavator
Website : https://www.siamkubota.co.th/construction/product/25
สายด่วนบริการสยามคูโบต้า : 1747
ศูนย์ลูกค้าสัมพันธ์ สยามคูโบต้า : 0-2909-1234
#รถขุดคูโบต้า #KUBOTA #แกร่งเกินคุ้มครอบคลุมทุกงานจ้าง
#รถขุดยอดขายอันดับ1 #คูโบต้า #KIS #KubotaIntelligenceSolutions #คูโบต้านวัตกรรมอัจฉริยะ #ขุดแหลกแจกโชค
หมายเหตุ ยอดขายอันดับ1 อ้างอิงจากข้อมูลยอดขายรถขุดคูโบต้า ตั้งแต่เดือน ม.ค. 2562 - เดือน ธ.ค. 2562 อ้างอิงจากข้อมูลสถิติจำนวนรถขุดใหม่ขนาดเล็ก (ตั้งแต่ 1-10 ตัน) ที่จดทะเบียนตามกฎหมายว่าด้วยรถยนต์ จากกรมขนส่งทางบก (ทั่วประเทศไทย)
✨ Real draw, real giveaway. Congratulations to the lucky winner who won 1 Baht gold necklace from the prize draw for the 1th ′′ Lucky giveaway ′′ campaign. Total 10 persons.
✨ For the 2st prize draw, it will be caught on 30 Feb. The prize draw is 5 Baht of gold necklace, 2 Prizes and Kubota KX91- 3 2563 CE, 1 Prizes worth over 1,400,000 Baht.
💥 Anyone who wants to win a prize, hurry up to buy a Kubota excavator by 31 T. This 2563th only
NOTE:
Conditions (1.) Winners win prizes are customers who buy first-hand Kubota Excavator. From 1 June 2563-31 October 2563 from the dealer of Siam Kubota Corporal. Limited edition throughout the Kingdom of Thailand and leasing contract to be completed on 15 November 2563 There will be a chance to win prizes by buying 1 Kubota Excavator. You will have a chance to win 1 privileges.
(2.) 2 prize draws with the following details.
The 1th time, 31th day. July 63 at 10.00 pm Gold necklace giveaway weighing 1 baht. 10 prizes worth 250,000 baht. (Winners are the customers who buy Kubota excavator during 1 June. 2563-31 Jul. July 2563 and leasing contract complete within 15 s. July 2563)
The 2th time, 30th day. Nov. 63 at 10.00 pm 3.2 Ton Kubota Kubota Excavator 2 3 3 (KIS) (CE) 1 Edition Chang worth 1,150,000 Baht and 5 Baht gold necklace weighs 2 Baht. Prize worth 250,000 baht (The winner of the prize is the customer who bought the Kubota excavator between 1 June. Nov. 2563-31 T. 2563 and leasing contract completed within 15 May. 2563)
(3.) Prize Drawing Place: Siam Kubota Corporation Co Ltd. (Headquarters), 101/19-24 Moo 20, Nakhon Nakhon, Khlong Luang, Pathu province. Mthani 12120
(4.) Drawing Method: Customer Data Key Dealer Buying Kubota Excavator in KADs System (KUBOTA AUTHORIZED HEALER SYSTEM) of the company where customer data is comprised.
- Customer's preliminary information is name - surname, address, phone number.
- Purchasing information include car model, car number, machine number, date of purchase, distributors who bought items.
(5.) The company will announce the lucky list via Facebook. Kubota-Kubota Excavator (www.facebook.com/KubotaExcavator)
) with the following details. 1th: August 31th, 2563th / 2th: November 30, 2563
(6.) The lucky winner must submit the real documents in the award at Siam Kubota Corporation Mechanical Business, Limited (Headquarters). 101/19-24 Building 2, Floor 4, Moo 20, 20 Industrial Estate, Nakhon, Khlong Nong, Khlong Nong, Khlong Luang, Pathum Thani province 12120 Tel. 02-9090300 on 449 (within business hours Monday-Friday 08.00-17.00 hrs. ) by self or by mail to verify evidence and confirm eligibility within 15 days after award announcement. Otherwise, the waiver is forfeited.
(7.) The lucky winner must win the prize as defined. The prize cannot be exchanged for cash or other giveaways and no component is paid.
(8.) In case the 1nd lucky person forfeited the company will reward the lucky winner in order.
(9.) judgments of the committee are final and final.
(10.) Staff of Siam Kubota Corporation Ltd and Siam Kubota Leasing Ltd. including employees of distributors, advertisement representatives and board of directors and family are not eligible to participate.
(11.) Award Winners consent to Siam Kubota Corporation Co Ltd. Images, information or details of winners to advertise, corporate public relations through various media. Advertising comprises of TV, radio, newspaper, Facebook, Line, poster, Facebook, Line, Website and all kinds of press.
(12.) Prizes from 1,000 baht or more. Must pay 5 % of the value of the prize.
(13.) The lucky winner has only one top prize. If the lucky winner is drawn, the duplicate will win a new prize for the new lucky winner instead.
(14.) The lucky person who leases through Siam Kubota Leasing will require the normal Kubota Excavator installment status only.
(15.) Permits are given to play games, carry or reward for gambling by the Citizenship Service Center, Department of Governance, license number 29/2563-30/2563
For more information about products and services, please contact.
Inbox https://m.me/KubotaExcavator
Website : https://www.siamkubota.co.th/construction/product/25
Siam Kubota Hotline: 1747
Siam Kubota Customer Relations Center: 0-2909-1234
#รถขุดคูโบต้า #KUBOTA #แกร่งเกินคุ้มครอบคลุมทุกงานจ้าง
#รถขุดยอดขายอันดับ1 #คูโบต้า #KIS #KubotaIntelligenceSolutions #คูโบต้านวัตกรรมอัจฉริยะ #ขุดแหลกแจกโชค
Note the number 1 sales. Quote from Kubota excavator sales data since June 1 Dec. 2562-Dec. 2562 referred to statistics of small new excavators (from 1-10 tons) registered by car from the Department of Land Transport (Thailand)Translated
hand images drawing 在 Pin2D 電繪狂 Facebook 的最佳貼文
Here’s a collection of different kinds of hand gestures!
Although drawing hands is not easy, it is very important ~
Source: https://bit.ly/2ZEdRAq
※Original author’s code of use※
Available for saving images, using as icon and cover, repost etc. But please do not mention any self-made related statements, even though you have processed them. Also, NG for commercial uses.
Source: https://bit.ly/2sDKBxB
※Original author’s code of use※
Please do not mention any self-made related statements, and do not repost as “returns received” materials. Apart from that, other uses are mostly available. Including using in fanzines, or other commercial uses etc.
For further more, please refer to the link provided.
#tutorial #sketch #lineart #materials #hands [牙牙獸]
hand images drawing 在 コバにゃんチャンネル Youtube 的最佳貼文
hand images drawing 在 大象中醫 Youtube 的最佳貼文
hand images drawing 在 大象中醫 Youtube 的最佳解答
hand images drawing 在 How to Draw HANDS and HAND POSES! - YouTube 的推薦與評價
Download the reference files:http://bit.ly/DWJ_HandPosesGet the Tutorial Archive (and more!) ... <看更多>
hand images drawing 在 52 Pictures of hands ideas | how to draw hands, drawings, art ... 的推薦與評價
Nov 19, 2019 - Explore Jo Beasley's board "pictures of hands" on Pinterest. See more ideas about how to draw hands, drawings, art drawings. ... <看更多>
相關內容